package Motor;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;

import javax.microedition.lcdui.Image;
import javax.microedition.rms.RecordStore;


public class Habilidad extends Carta{ 
	
	boolean instant; 
	
	Habilidad(int id, int t, Image i,Image i2,
			boolean inst){
		setTipoCarta(1);
		this.setId(id);
		this.setTipo(t);
		this.setImagen(i);
		this.setIcono(i2);
		this.instant=inst;
	}
	
	void usar(Hero myHero, Hero uHero,Hero myHeroC, Hero uHeroC){
		switch(this.getId()){
		case 8://EMPUJE ASTRAL
			myHeroC.setAtk((float) (1.5 * myHeroC.getAtk()));
			break;
		case 9://PROYECTIL MAGICO
			myHeroC.setDmg(myHeroC.getDmg()+2);
			break;
		case 10://CONGELAR
			uHeroC.setAtk(uHeroC.getAtk()-18);
			break;
		case 11://ESCUDO DE MANA
			myHeroC.setDmg(0);
			uHeroC.setAtk(0);
			break;
		case 12://ABSORVER VIDA
			myHero.setHlt(myHero.getHlt()+myHeroC.getDmg());
			break;
		case 13://AURA VELOZ
			myHero.setAtk(myHero.getAtk()+2);
			break;
		case 14://AURA PODEROSA
			myHero.setDmg(myHero.getDmg()+2);
			break;
		case 15://SANAR
			myHero.setHlt(myHero.getHlt()+3);
			break;
		case 16://MALDICION
			uHeroC.setDmg(uHeroC.getDmg()-2);			
			break;
		case 17://FURIA BERSEK
			myHero.setDmg(myHero.getDmg()+uHeroC.getDmg());
			break;
		case 18://COLERA
			myHeroC.setAtk(2*myHeroC.getAtk());
			break;
		case 19://ESPADA BISONTE
			myHero.setDmg(myHero.getDmg()+2);
			break;
		case 20://CASCO DE LA CONCENTRACION
			myHero.setAtk(myHero.getAtk()+4);
			break;
		case 21://GRITO DE GUERRA
			myHeroC.setAtk((float) (1.5*myHeroC.getAtk()));
			myHeroC.setDmg(myHeroC.getDmg()+1);
			break;
		case 22://ESCUDO HORALDRICO
			uHero.setDmg(uHero.getDmg()-1);
			break;
		case 23://ARMADURA DEMONIACA
			myHero.setDmg((int) (1.5*myHero.getDmg()));
			myHero.setAtk((int) (1.6*myHero.getAtk()));
			myHero.setHlt(myHero.getHlt()-1);
			break;
		case 24://FUERZA DEL GUERRERO
			myHeroC.setAtk(myHeroC.getAtk()+8);
			break;
		case 25://ASALTO NOCTURNO
			uHeroC.setAtk((float) (0.5* uHeroC.getAtk()));
			uHeroC.setDmg(uHeroC.getDmg()-2);
			break;
		case 26://ARCO DE ARCE
			myHero.setAtk(myHero.getAtk()+1);
			myHero.setDmg(myHero.getDmg()+2);
			break;
		case 27://FLECHA INCENDIARIA
			myHeroC.setDmg(myHeroC.getDmg()+4);
			myHero.setHlt(myHero.getHlt()-1);
			break;
		case 28://CAMUFLAJE
			uHeroC.setAtk((float) (0.5*uHeroC.getAtk()));
			myHeroC.setDmg(myHeroC.getDmg()+2);
			break;
		case 29://CORAZA DE CUERO
			uHero.setDmg(uHero.getDmg()-1);
			break;
		case 30://PUNTERIA EXPERTA
			myHeroC.setDmg(myHeroC.getDmg()+3);
			break;
		case 31://RIFLE
			myHeroC.setAtk(myHeroC.getAtk()-2);
			myHeroC.setDmg(myHeroC.getDmg()+5);
			myHeroC.setHlt(myHeroC.getHlt()-1);
			break;
		}
	}
	
	public boolean isInstant(){
		return this.instant;
	}
	
	void almacenar(RecordStore rs){
		byte[] registro,imag;
		ByteArrayOutputStream baos;
		DataOutputStream dos;
		try{
			baos = new ByteArrayOutputStream();
			dos = new DataOutputStream(baos);
			dos.writeInt(getTipoCarta());
			dos.writeInt(getId());
			dos.writeInt(getTipo());
			if (instant){
				dos.writeInt(1);
			}else{dos.writeInt(0);}			
			imag=Carta.getByteArray(getImagen());
			dos.writeInt(imag.length);			
			dos.write(imag, 0, imag.length);
			imag=Carta.getByteArray(getIcono());
			dos.writeInt(imag.length);			
			dos.write(imag, 0, imag.length);
			dos.flush();
			registro = baos.toByteArray();
			rs.addRecord(registro,0,registro.length);
			baos.close();
			dos.close();
		}
		catch (Exception e){
			System.out.println("Error al insertar registro Habilidad");
		}
	}
	Carta cargar(RecordStore rs,int i){
		Habilidad h=null;
		Image ima,ico;
		int size;
		byte[] r;
		ByteArrayInputStream bais;
		DataInputStream dis;
		byte[] registro = new byte[40000];
		try{
			bais = new ByteArrayInputStream(registro);
			dis = new DataInputStream(bais);
			rs.getRecord(i,registro,0);
			//leo los datos principales
			int tc=dis.readInt();
			int id=dis.readInt();
			int tipo=dis.readInt();
			int inst=dis.readInt();
			boolean instant =inst==1;
			//leo la imagen
			size=dis.readInt();
			r=new byte[size];
			dis.read(r, 0, size);
			ima=Image.createImage(r, 0, size);
			//leo el icono
			size=dis.readInt();
			r=new byte[size];
			dis.read(r, 0, size);
			ico=Image.createImage(r, 0, size);
			bais.close();
			dis.close();
			h=new Habilidad(id,tipo,ima,ico,instant);
		}
		catch (Exception e){
			System.out.println("Error al leer los registros");
		}
		registro = null;
		return h;
	}

	public Carta copiar() {
		Habilidad aux=null;
		if(this!=null){
			aux= new Habilidad(this.getId(), this.getTipo(),
									this.getImagen(),this.getIcono(),
									this.instant);
		}
		return aux;
	}
}
